/**
 * Clase PantallaRegistro: define la pantalla que vera el usuario, la primera vez que arranque la
 * aplicacion, para que pueda almacenar sus parametros identificativos, y de esta manera evitar
 * el tedioso proceso de login en un dispostivo movil (mejoras de USABILIDAD)
 */
package infbmobile.pantallas;

// Importaciones externas
import com.sun.lwuit.*;
import com.sun.lwuit.animations.CommonTransitions;
import com.sun.lwuit.animations.Transition3D;
import com.sun.lwuit.events.ActionEvent;
import com.sun.lwuit.events.ActionListener;

// Importaciones internas
import com.sun.lwuit.geom.Dimension;
import com.sun.lwuit.geom.Rectangle;
import com.sun.lwuit.layouts.BoxLayout;
import infbmobile.comunicaciones.Conexionfoto;
import infbmobile.main.*;
import infbmobile.util.UIHerramientas;
import java.io.IOException;
import javax.microedition.lcdui.Alert;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.Player;
import javax.microedition.media.control.GUIControl;
import javax.microedition.media.control.VideoControl;

public class PantallaCamara extends Form implements ActionListener {
    // Referencia al midlet principal

    public InfBMobile midlet;

    // Atributos de clase
    private Command enviar,  salir,  Camara,  OK;
    public Player player;
    private MediaComponent cam;
    private VideoControl videoControl;
    private Form f;
    public Image image;
    private byte[] photo;
    private Container c;
    private TextField txt;


    /*
     * Constructor principal de la clase
     */
    public PantallaCamara(InfBMobile midlet) {
        super("Imagen Capturada");
        this.midlet = midlet;
        // Definimos el layout del formulario
        setLayout(new BoxLayout(BoxLayout.X_AXIS));
        // Configuramos los comandos

        Camara = new Command("Camara");
        this.addCommand(Camara);
        enviar = new Command("Enviar");
        this.addCommand(enviar);
        this.setCommandListener(this);
        //Mostramos la camara
        MostrarCamara();

    }

    public void actionPerformed(ActionEvent evento) {
        Object fuente = evento.getSource();


        // Recogemos de donde vino el evento
        if (fuente == Camara) {
            player.close();
            MostrarCamara();
        } else if (fuente == enviar) {

            f = new Form("Enviar Imagen");
            txt = new TextField();

            c = UIHerramientas.crearPareja("Deje su Comentario", txt);
            Label bottomText = new Label(image);
            bottomText.setText("Imagen a enviar ");
            bottomText.setTextPosition(Component.BOTTOM);
            OK = new Command("CK");
            f.addCommand(OK);

            f.addComponent(c);
            f.addComponent(bottomText);
            f.setCommandListener(this);

            //this.setTransitionOutAnimator(Transition3D.createRotation(1000, true));
            // this.setTransitionOutAnimator(Transition3D.createCube(1000, true));

            f.show();
        } else if (fuente == OK) {

            //CONNEXION
            String texto = txt.getText();
            Thread con = new Thread(new Conexionfoto(photo, texto,midlet));
            con.start();

            //f.setTransitionOutAnimator(Transition3D.createRotation(1000, true));

            Form fin = new Form("Imagen en enviada");
            salir = new Command("Volver");
            fin.addCommand(salir);
            fin.addCommand(Camara);
            fin.setCommandListener(this);
            fin.addComponent(new Label("Imagen enviada con exito"));
            fin.show();



        } else if (fuente == salir) {
            if (player != null) {
                player.close();
            }
            midlet.mostrarPantallaMenuPrincipal();
        }


    }

    /**
    Procedimiento Para mostra la camara
     */
    public void MostrarCamara() {

        try {

            // creamos el player
            player = Manager.createPlayer("capture://video");
            player.realize();
            player.start();
            // inicializamos el controlado de video

            videoControl = (VideoControl) player.getControl("VideoControl");
            VideoCanvas video = new VideoCanvas(this, videoControl);
            video.empezar();











        //this.show();


        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (MediaException ex) {
            ex.printStackTrace();
        }
    }

    public void TomarFoto() {
        if (player != null) {
            try {
                // tomamos  la foto
                photo = videoControl.getSnapshot(null);
                // creamos una imgen apartir del array de bytes
                image = Image.createImage(photo, 0, photo.length);
                this.setBgImage(image);
                this.show();


            } catch (MediaException e) {
                e.printStackTrace();
            }
        }
    }
}

